package com.aoxin.mapper.opm;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.aoxin.model.dto.MenuDto;
import com.aoxin.model.dto.SelectTreeDto;
import com.aoxin.model.dto.TreeDto;
import com.aoxin.model.opm.SlfMenu;

/**
 * 菜单Mapper
 * 
 * @author Melody
 * @date 2018年3月21日 上午10:34:52
 */
public interface SlfMenuMapper {

	/**
	 * 删除菜单
	 * 
	 * @param menuId
	 *            菜单ID
	 */
	void deleteByPrimaryKey(Integer menuId);

	/**
	 * 批量删除菜单
	 * 
	 * @param menuId
	 *            菜单ID
	 */
	void deleteByPrimaryKeys(List<Integer> menuId);

	/**
	 * 添加菜单
	 * 
	 * @param record
	 *            菜单
	 */
	void insertSelective(SlfMenu record);

	/**
	 * 查询菜单
	 * 
	 * @param menuId
	 *            菜单ID
	 * @return 菜单
	 */
	SlfMenu selectByPrimaryKey(Integer menuId);

	/**
	 * 修改菜单
	 * 
	 * @param record
	 *            菜单
	 */
	void updateByPrimaryKeySelective(SlfMenu record);

	/**
	 * 批量修改菜单状态
	 * 
	 * @param menuIds
	 *            菜单ID
	 * @param state
	 *            状态
	 */
	void updateStates(@Param("menuIds") List<Integer> menuIds, @Param("state") Integer state);

	/**
	 * 查询菜单
	 * 
	 * @param map
	 *            条件集合
	 * @return 菜单集合
	 */
	List<SlfMenu> getList(Map<String, Object> map);

	/**
	 * 获取记录数
	 *
	 * @param params
	 *            查询条件
	 * @return 记录数
	 */
	Long getRecordCount(Map<String, Object> params);

	/**
	 * 获取下一排序号
	 * 
	 * @param parentId
	 *            父ID
	 * @return 序号
	 */
	Long getNextSequence(@Param("parentId") Integer parentId);

	/**
	 * 检查名称重复
	 * 
	 * @param name
	 *            名称
	 * @param menuId
	 *            菜单ID
	 * @return 数据量
	 */
	Long checkName(@Param("name") String name, @Param("menuId") Integer menuId);

	/**
	 * 查询机构树
	 * 
	 * @param parentId
	 *            父ID
	 * @return 机构树
	 */
	List<TreeDto> getMenuTreeList(@Param("parentId") Integer parentId);

	/**
	 * 查询机构树
	 * 
	 * @param parentId
	 *            父ID
	 * @return 机构树
	 */
	List<SelectTreeDto> getMenuSelectTreeList(@Param("parentId") Integer parentId);

	/**
	 * 查询员工所有的菜单
	 * 
	 * @param employeeId
	 *            员工ID
	 * @param parentId
	 *            父ID
	 * @param type
	 *            菜单类型
	 * @return 菜单
	 */
	List<MenuDto> getEmployeeMenuList(@Param("employeeId") Integer employeeId, @Param("parentId") Integer parentId, @Param("type") Integer type);

	/**
	 * 查询按钮
	 * 
	 * @param employeeId
	 *            员工ID
	 * @param parentId
	 *            父ID
	 * @return 按钮
	 */
	List<Map<String, Object>> getEmployeeMenuButtonList(@Param("employeeId") Integer employeeId, @Param("parentId") Integer parentId);
}